package com.bsu.ascm.controls;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import android.content.Context;
import android.widget.ListView;

import com.bsu.ascm.controls.ListViewTableAdapter.TableCell;
import com.bsu.ascm.controls.ListViewTableAdapter.TableRow;

public class ListViewTable extends ListView{
	ArrayList<TableRow> table = new ArrayList<TableRow>();			//表所有数据
	TableCell[] titles = null;										//保存列名行数据
	List<ListViewColumn> l_col = null;										//按顺序保存列名与caption数据
	public ListViewTable(Context context) {
		super(context);
	}
	/**
	 * 生成表格
	 * @param context	上下文环境
	 * @param col		列数据
	 * @param data		表格数据
	 */
	public void makeTable(Context context,List<ListViewColumn> col,List<HashMap<String,String>> data){
		setTitles(col);
		setDatas(data);
		ListViewTableAdapter tableAdapter = new ListViewTableAdapter(context,table);
		this.setAdapter(tableAdapter);
	}
	
	/**
	 * 设置表格列名
	 * @param colb 按顺序保存数据列名对应的表格列名
	 */
	public void setTitles(List<ListViewColumn> col){
		l_col = col;
		titles = new TableCell[col.size()];
		for(int i=0;i<col.size();i++)
			titles[i] = new TableCell(col.get(i).getColcaption(),
					col.get(i).getWidth(),
					LayoutParams.FILL_PARENT,
					TableCell.STRING);
		table.add(new TableRow(titles));
	}

	/**
	 * 设置表格数据
	 * @param lhm	List保存所有行,HashMap保存每行数据
	 */
	public void setDatas(List<HashMap<String,String>> tabledata){
		//如果未设置标题列，不生成表格数据
		if(titles == null)
			return;
		for(int i=0;i<tabledata.size();i++){
			TableCell[] cells = new TableCell[titles.length];
			for(int j=0;j<cells.length;j++){
				cells[j] = new TableCell(tabledata.get(i).get(getColNameByColCaption(l_col, titles[j].value.toString())),
						titles[j].width,
						LayoutParams.FILL_PARENT,
						TableCell.STRING);
			}
			table.add(new TableRow(cells));
		}
	}
	
	/**
	 * 从List<ListViewcolumn>集合中通过caption获得colname
	 * @param llvc	列集合
	 * @param cap	列描述
	 */
	private String getColNameByColCaption(List<ListViewColumn> llvc,String cap){
		for(ListViewColumn lvc:llvc)
			if(lvc.getColcaption().equals(cap))
				return lvc.getColname();
		return null;
	}
	
	/**
	 * 列信息类
	 * @author fc
	 *
	 */
	static public class ListViewColumn{
		private String colname = "";
		private String colcaption = "";
		private int width = 0;
		
		public ListViewColumn(String cn,String cc,int w){
			colname = cn;
			colcaption = cc;
			width = w;
		}
		
		public String getColname() {
			return colname;
		}
		public void setColname(String colname) {
			this.colname = colname;
		}
		public String getColcaption() {
			return colcaption;
		}
		public void setColcaption(String colcaption) {
			this.colcaption = colcaption;
		}
		public int getWidth() {
			return width;
		}
		public void setWidth(int width) {
			this.width = width;
		}
	}
}

